/**
 * 给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集。解集不能包含重复的子集。你可以按任意顺序返回子集
 * 示例一:
 *  输入: nums = [1, 2, 3]
 *  输出: [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
*/
function subSets (nums) {
    const result = [];
    // 空集是任何集合的子集
    result.push([]);
    for (let i = 0; i < nums.length; i++) {
        const temp = [];
        // 把数据依次加进以前的集合中并添加到temp集合中（扩展法核心）
        for (let j = 0; j < result.length; j++) {
            const r = [...result[j]];
            r.push(nums[i]);
            temp.push(r);
        }
        for (let k = 0; k < temp.length; k++) {
            result.push(temp[k]);
        }
    }
    return result;
}
console.log(subSets([1, 2, 3]));